/* 输出根节点到每个叶子结点的路径 */

#include <iostream>
#include "BiTreefun.h"
#define maxsize 50
using namespace std;

// 输出路径 -- 深度优先遍历
void allpath(BTNode *p, char pathstack[], int top)
{
  // 如果二叉树不为空
  if (p != NULL)
  {
    // 根结点进数组
    pathstack[top] = p->data;
    
    // 如果到达叶子结点 -- 打印栈内所有元素
    if (!p->lchild && !p->rchild)
      for (int i = 0; i <= top; ++i)
        cout << pathstack[i] << " ";
    cout << endl;
    
    // 输出左子树到叶子结点的所有路径
    allpath(p->lchild, pathstack, top + 1);
    
    // 输出右子树到叶子结点的所有路径
    allpath(p->rchild, pathstack, top + 1);
  }
}

int main()
{
  // 数组末尾
  int top = 0;
  
  // 存储根结点到叶子结点的路径
  char pathstack[maxsize];
  
  // 创建二叉树
  BTNode *T = create_bitree();
  
  // 输出根结点到叶子结点的所有路径
  allpath(T, pathstack, top);
}